package com.bjc.base.core;

import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.bjc.base.bean.BaseReqVO;

/**
 * 公共Service实现类
 * 
 * @author 许自辉
 * @date 2017年7月5日 下午5:23:15
 * @param T
 *            VO请求类型
 * @param T2
 *            VO返回类型
 */
@Service
public abstract class BaseServiceImpl<T, T2> implements IBaseService<T, T2> {

	public IBaseDao<T, T2> baseDao;

	/**
	 * 基础DAO
	 *
	 * @author 许自辉
	 * @date 2017年7月18日
	 * @param baseDao
	 */
	public abstract void setBaseDao(IBaseDao<T, T2> baseDao);

	@Override
	public T2 getById(int id) {
		return baseDao.getById(id);
	}

	@Override
	public T2 get(T record) {
		return baseDao.get(record);
	}

	@Override
	public List<T2> getList(T record) {
		return baseDao.getList(record);
	}

	@Override
	public int deleteById(int id) {
		return baseDao.deleteById(id);
	}

	@Override
	public int deleteList(String ids) {
		if (StringUtils.isNotEmpty(ids) && StringUtils.isNotBlank(ids)) {
			String[] strs = ids.trim().split(",");
			int[] ints = Arrays.stream(strs).mapToInt(Integer::valueOf).toArray();
			return baseDao.deleteList(ints);
		}
		return 0;
	}

	@Override
	public int deleteList(int[] ids) {
		return baseDao.deleteList(ids);
	}

	@Override
	public int insert(T record) {
		if (record instanceof BaseReqVO) {
			BaseReqVO baseReqVO = (BaseReqVO) record;
			if (baseReqVO.getEnableFlag() == null) {
				baseReqVO.setEnableFlag(1);
			}
		}
		return baseDao.insert(record);
	}

	@Override
	public int insertList(List<T> records) {
		records.forEach(s->{
			if (s instanceof BaseReqVO) {
				BaseReqVO baseReqVO = (BaseReqVO) s;
				if (baseReqVO.getEnableFlag() == null) {
					baseReqVO.setEnableFlag(1);
				}
			}
		});
		return baseDao.insertList(records);
	}

	@Override
	public int update(T record) {
		return baseDao.update(record);
	}

	@Override
	public int updateList(List<T> records) {
		return baseDao.updateList(records);
	}

}
